package ProxyModel.DynamicModel;

import ProxyModel.StaticModel.RealSubject;
import ProxyModel.StaticModel.Subject;

import java.lang.reflect.Proxy;

/**
 * 动态代理：
 *         编写一个委托类的接口，即静态代理的（Subject接口）
 *          实现一个真正的委托类，即静态代理的（RealSubject类）
 *         创建一个动态代理类，实现InvocationHandler接口，并重写该invoke方法
 *         在测试类中，生成动态代理的对象。
 *
 *         利用Proxy类的newProxyInstance方法创建代理对象，
 *         第一个参数是classloader，
 *         第二个是接口类的数组（jdk代理支持多个接口的关键所在），
 *         第三个是代理对吸纳或
 * @author
 * @create 2018-10-18 15:43
 **/
public class Test {
    public static void main(String[] args) {
        Subject realSubject = new RealSubject();
        DynamicProxy proxy = new DynamicProxy(realSubject);
        ClassLoader classLoader = realSubject.getClass().getClassLoader();
        Subject subject = (Subject) Proxy.newProxyInstance(classLoader, new  Class[]{Subject.class}, proxy);
        subject.visit();

    }
}
